#include "Formater.h"



using std::ostream;


ostream& operator<<(ostream& os, const Formater& formater)
{
    formater.format(os);
    return os;
}

/////////////////////////////////////////////////////////////////////
SequenceUnitFormater::SequenceUnitFormater(int amoutInBase)
            : amoutInBase(amoutInBase)
{}

void SequenceUnitFormater::format(ostream& os)
{
    return os << this.os;
}

void SequenceUnitFormater::visit(const Unit& unit)
{
    int numInCurUnit = amoutInBase / unit.getRatePerBaseUnit();
    if (numInCurUnit > 0)
        os << numInCurUnit <<" " << unit.getName();
    else
        os << 0 << " " << unit.getBaseUnit.getName();
}


/////////////////////////////////////////////////////////////////////
BaseUnitFormater::SequenceUnitFormater(int amoutInBase)
            : amoutInBase(amoutInBase)
{}

void BaseUnitFormater::format(ostream& os)
{
    if (amoutInBase > 0)
        os << amoutInBase << " " <<baseUnit.getName();
    else
        os << 0 << " " << unit.getBaseUnit.getName();
}

